今天來談談由後端取得前端所送出資料的方法
這個方式相信只要有開發過網頁用的表單一定都會知道的方法,無論是PHP、JSP或ASP
沒錯就是使用Request.Form
//Controller
public ActionResult test(string content)
{
ViewBag.content = content;
return View();
}
//View
@using (Html.BeginForm())
{
@Html.Label("輸入訊息")
<input type="text" name="content"/>
<button class="btn btn-danger">送出</button>
}
<p>輸入的訊息為:@ViewBag.content</p>
這個方法就是透過表單的Name屬性與後端接收參數名稱相同的方式做繫結
不過差異在MVC表單使用Razor的方式產生,當然也是可以使用HTML的Form標籤
顧名思義會取得由前端所傳來的表單集合,如果表單欄位很多,使用這個方式會比第一種方式方便
//Controller
public ActionResult test(FormCollection formCollection)
{
ViewBag.content = formCollection["content"];
return View();
}
//View
@using (Html.BeginForm())
{
@Html.Label("輸入訊息")
<input type="text" name="content"/>
<button class="btn btn-danger">送出</button>
}
<p>輸入的訊息為:@ViewBag.content</p>
這個方式的重點在於後端也就是Controller使用FormCollection集合接收表單的"所有資料"
也就是不管你要不要傳遞到後端全部都會傳,所以在使用上要特別注意
這個是屬於比較複雜的模型繫結,這種模型通常是有多個自訂的屬性類別
//在Models建立一個模型類別
public class modelTest
{
public string Name { get; set; }
public string Id { get; set; }
}
//在Controller利用此模型的型別接收表單資料
public ActionResult test(modelTest form)
{
ViewBag.Name = form.Name;
ViewBag.Id = form.Id;
return View();
}
//在View的表單欄位名稱要跟模型的屬性名稱相同
@using (Html.BeginForm())
{
@Html.Label("輸入名稱")
<input type="text" name="Name" />
@Html.Label("輸入Id")
<input type="text" name="Id" />
<button class="btn btn-danger">送出</button>
}
<p>輸入的名稱為:@ViewBag.Name</p>
<p>輸入的Id為:@ViewBag.Id</p>